package com.xyx.hw0725;

import java.util.Scanner;

public class Arithmetic {

	public static void main(String[] args) {
		// 第一题
		System.out.println("兔子数为：" + rabbit(20));
		System.out.println("------------------------");
		// 第二题
		primeNum();
		System.out.println("------------------------");
		// 第三题
		narNum();
		System.out.println("------------------------");
		// 第四题
		// resolveNum();
		System.out.println("------------------------");
		// 第五题
		stuScore();
		System.out.println("------------------------");
		//第六题
		common();

	}

	/**
	 * 【程序1】 斐波那契数列兔子的运算
	 * 古典问题：有一对兔子，从出生后第3个月起每个月都生一对兔子，小兔子长到第三个月后每个月又生一对兔子，假如兔子都不死，问每个月的兔子总数为多少？
	 * //这是一个菲波拉契数列问题
	 * 
	 * 
	 */
	public static long rabbit(long i) {
		if (i == 1 || i == 2) {
			return 1;
		}

		return rabbit(i - 2) + rabbit(i - 1);
	}

	/**
	 * 【程序2】 输出101到200的素数 判断101-200之间有多少个素数，并输出所有素数。
	 * 程序分析：判断素数的方法：用一个数分别去除2到sqrt(这个数)，如果能被整除， 则表明此数不是素数，反之是素数。
	 * 
	 */
	public static void primeNum() {
		int count = 0;
		for (int i = 101; i <= 200; i++) {
			if (i % 2 != 0) {
				count++;
				System.out.print(" " + i);
				if (count % 10 == 0) {
					System.out.println();
				}
			}
		}
		System.out.println("共有素数：" + count + "个");
	}

	/**
	 * 【程序3】 打印出所有的 "水仙花数 "，所谓 "水仙花数 "是指一个三位数，其各位数字立方和等于该数本身。 例如：153是一个 "水仙花数
	 * "，因为153=1的三次方＋5的三次方＋3的三次方。
	 */
	public static void narNum() {
		System.out.println("水仙花数为：");
		for (int i = 100; i <= 999; i++) {
			int q = (i / 100);
			int w = (i / 10 % 10);
			int e = (i % 100 % 10);
			if ((q * q * q + w * w * w + e * e * e) == i) {
				System.out.print(" " + i);
			}
		}
		System.out.println();
	}

	/**
	 * 【程序4】 题目：将一个正整数分解质因数。例如：输入90,打印出90=2*3*3*5。
	 * 程序分析：对n进行分解质因数，应先找到一个最小的质数k，然后按下述步骤完成： (1)如果这个质数恰等于n，则说明分解质因数的过程已经结束，打印出即可。
	 * (2)如果n <> k，但n能被k整除，则应打印出k的值，并用n除以k的商,作为新的正整数你n,重复执行第一步。
	 * (3)如果n不能被k整除，则用k+1作为k的值,重复执行第一步。
	 * 
	 */
	public static void resolveNum() {

		Scanner sc1 = new Scanner(System.in);
		int numA = sc1.nextInt();
		for (int i = 2; i <= numA; i++) {
			while (numA % i == 0 && numA != i) {
				numA /= i;
				System.out.print(" " + i);
			}
			if (numA == i) {
				System.out.print(" " + i);
				break;
			}
		}
		sc1.close();
	}

	/**
	 * 【程序5】 题目：利用条件运算符的嵌套来完成此题：学习成绩> =90分的同学用A表示， 60-89分之间的用B表示，60分以下的用C表示。
	 */
	public static void stuScore() {
		Scanner sc = new Scanner(System.in);
		int stuScoreA = sc.nextInt();
		char stuScoreB = stuScoreA >= 90 ? 'A' : stuScoreA >= 60 ? 'B' : 'C';
		System.out.println("学习成绩为：" + stuScoreB);
		sc.close();
	}
	/**
	 * 【程序6】   
题目：输入两个正整数m和n，求其最大公约数和最小公倍数。   
/**在循环中，只要除数不等于0，用较大数除以较小的数，将小的一个数作为下一轮循环的大数，
 * 取得的余数作为下一轮循环的较小的数，如此循环直到较小的数的值为0，返回较大的数，此数即为最大公约数，
 * 最小公倍数为两数之积除以最大公约数。
 */
	public static void common() {
		
	}
}
